// 设置管理类
class SettingsManager {
  constructor() {
    this._settings = {
      showAdultContent: false, // 默认不显示高级角色
      adultSettingUnlocked: false, // 默认不显示高级设置选项
      summaryThreshold: 10, // 对话总结阈值，默认10轮
      isLoggedIn: false, // 默认未登录
      immersiveMode: false, // 默认不开启沉浸模式
    };
    this.initSettings();
    this.checkLoginStatus(); // 检查登录状态
  }

  // 初始化设置
  initSettings() {
    const settings = uni.getStorageSync('appSettings');
    if (settings) {
      try {
        const parsedSettings = JSON.parse(settings);
        this._settings = { ...this._settings, ...parsedSettings };
      } catch (e) {
        console.error('解析设置失败:', e);
      }
    }
  }

  // 检查登录状态
  checkLoginStatus() {
    const userInfo = uni.getStorageSync('userInfo');
    if (userInfo) {
      try {
        const parsedUserInfo = typeof userInfo === 'object' ? userInfo : JSON.parse(userInfo);
        this._settings.isLoggedIn = parsedUserInfo.isLogin || false;
        
        // 如果未登录，确保高级角色和高级设置都被关闭
        if (!this._settings.isLoggedIn) {
          this._settings.showAdultContent = false;
          this._settings.adultSettingUnlocked = false;
        }
        
        this.saveSettings();
      } catch (e) {
        console.error('解析用户信息失败:', e);
        this._settings.isLoggedIn = false;
        // 未登录时关闭高级角色和高级设置
        this._settings.showAdultContent = false;
        this._settings.adultSettingUnlocked = false;
      }
    } else {
      this._settings.isLoggedIn = false;
      // 未登录时关闭高级角色和高级设置
      this._settings.showAdultContent = false;
      this._settings.adultSettingUnlocked = false;
    }
  }

  // 保存设置
  saveSettings() {
    uni.setStorageSync('appSettings', JSON.stringify(this._settings));
  }

  // 获取是否显示高级角色
  get showAdultContent() {
    return this._settings.showAdultContent;
  }

  // 设置是否显示高级角色
  set showAdultContent(value) {
    // 如果未登录且尝试开启高级角色，则阻止并提示用户
    if (value === true && !this.isLoggedIn) {
      uni.showToast({
        title: '请先登录后再开启高级角色',
        icon: 'none',
        duration: 2000
      });
      return;
    }
    
    const oldValue = this._settings.showAdultContent;
    this._settings.showAdultContent = value;
    
    // 如果关闭了高级内容显示，同时也关闭高级设置解锁状态
    if (value === false) {
      this._settings.adultSettingUnlocked = false;
      
      // 如果解锁状态也发生了变化，发送额外的事件
      uni.$emit('settingsChange', {
        type: 'adultSettingUnlocked',
        value: false
      });
    }
    
    this.saveSettings();
    
    // 只有在值真正变化时才发送事件
    if (oldValue !== value) {
      // 发送设置变更事件
      uni.$emit('settingsChange', {
        type: 'showAdultContent',
        value: value
      });
      
      // 发送一个通用的设置变更事件，用于触发全局刷新
      setTimeout(() => {
        uni.$emit('settingsUpdated', {});
      }, 0);
    }
  }

  // 切换是否显示高级角色
  toggleAdultContent() {
    // 如果未登录且尝试开启高级角色，则阻止并提示用户
    if (!this.showAdultContent && !this.isLoggedIn) {
      uni.showToast({
        title: '请先登录后再开启高级角色',
        icon: 'none',
        duration: 2000
      });
      return false;
    }
    
    this.showAdultContent = !this.showAdultContent;
    return this.showAdultContent;
  }
  
  // 获取是否解锁高级设置
  get adultSettingUnlocked() {
    // 未登录时始终返回false
    if (!this.isLoggedIn) {
      return false;
    }
    return this._settings.adultSettingUnlocked;
  }
  
  // 设置是否解锁高级设置
  set adultSettingUnlocked(value) {
    // 如果未登录且尝试解锁高级设置，则阻止
    if (value === true && !this.isLoggedIn) {
      return;
    }
    
    const oldValue = this._settings.adultSettingUnlocked;
    this._settings.adultSettingUnlocked = value;
    this.saveSettings();
    
    // 只有在值真正变化时才发送事件
    if (oldValue !== value) {
      // 发送设置变更事件
      uni.$emit('settingsChange', {
        type: 'adultSettingUnlocked',
        value: value
      });
      
      // 发送一个通用的设置变更事件，用于触发全局刷新
      setTimeout(() => {
        uni.$emit('settingsUpdated', {});
      }, 0);
    }
  }
  
  // 解锁高级设置
  unlockAdultSetting() {
    // 如果未登录，则阻止解锁并提示用户
    if (!this.isLoggedIn) {
      uni.showToast({
        title: '请先登录后再解锁高级设置',
        icon: 'none',
        duration: 2000
      });
      return false;
    }
    
    this.adultSettingUnlocked = true;
    return this.adultSettingUnlocked;
  }

  // 获取对话总结阈值
  get summaryThreshold() {
    return this._settings.summaryThreshold;
  }

  // 设置对话总结阈值
  set summaryThreshold(value) {
    const oldValue = this._settings.summaryThreshold;
    this._settings.summaryThreshold = value;
    this.saveSettings();
    
    // 只有在值真正变化时才发送事件
    if (oldValue !== value) {
      // 发送设置变更事件
      uni.$emit('settingsChange', {
        type: 'summaryThreshold',
        value: value
      });
      
      // 发送一个通用的设置变更事件，用于触发全局刷新
      setTimeout(() => {
        uni.$emit('settingsUpdated', {});
      }, 0);
    }
  }

  // 获取登录状态
  get isLoggedIn() {
    this.checkLoginStatus(); // 每次获取时重新检查
    return this._settings.isLoggedIn;
  }
  
  // 设置登录状态
  set isLoggedIn(value) {
    const oldValue = this._settings.isLoggedIn;
    this._settings.isLoggedIn = value;
    
    // 如果登录状态变为未登录，自动关闭高级角色和高级设置
    if (value === false) {
      this._settings.showAdultContent = false;
      this._settings.adultSettingUnlocked = false;
    }
    
    this.saveSettings();
    
    // 只有在值真正变化时才发送事件
    if (oldValue !== value) {
      // 发送设置变更事件
      uni.$emit('settingsChange', {
        type: 'isLoggedIn',
        value: value
      });
      
      // 如果登出，发送高级角色和高级设置变更事件
      if (value === false) {
        uni.$emit('settingsChange', {
          type: 'showAdultContent',
          value: false
        });
        
        uni.$emit('settingsChange', {
          type: 'adultSettingUnlocked',
          value: false
        });
      }
      
      // 发送一个通用的设置变更事件，用于触发全局刷新
      setTimeout(() => {
        uni.$emit('settingsUpdated', {});
      }, 0);
    }
  }
  
  // 用户登录
  login(userInfo) {
    uni.setStorageSync('userInfo', userInfo);
    this.isLoggedIn = true;
    return this.isLoggedIn;
  }
  
  // 用户登出
  logout() {
    uni.removeStorageSync('userInfo');
    this.isLoggedIn = false;
    // 登出时自动关闭高级角色和高级设置（已在isLoggedIn的setter中处理）
    return this.isLoggedIn;
  }

  // 获取沉浸模式状态
  get immersiveMode() {
    // 未解锁高级设置时始终返回false
    if (!this.adultSettingUnlocked) {
      return false;
    }
    return this._settings.immersiveMode;
  }

  // 设置沉浸模式状态
  set immersiveMode(value) {
    // 如果未解锁高级设置，则阻止开启沉浸模式
    if (value === true && !this.adultSettingUnlocked) {
      return;
    }
    
    const oldValue = this._settings.immersiveMode;
    this._settings.immersiveMode = value;
    
    // 如果关闭了沉浸模式，保存设置
    if (value === false) {
      this.saveSettings();
    } else {
      // 如果开启沉浸模式，确保已解锁高级设置
      if (this.adultSettingUnlocked) {
        this.saveSettings();
      } else {
        this._settings.immersiveMode = false;
        return;
      }
    }
    
    // 只有在值真正变化时才发送事件
    if (oldValue !== value) {
      // 发送设置变更事件
      uni.$emit('settingsChange', {
        type: 'immersiveMode',
        value: value
      });
      
      // 发送一个通用的设置变更事件，用于触发全局刷新
      setTimeout(() => {
        uni.$emit('settingsUpdated', {});
      }, 0);
    }
  }
}

// 导出设置管理实例
export default new SettingsManager(); 